package java.main;

import java.util.Scanner;

/**
 * @author:0.2℃
 * @date： 2022-02-27 17:25
 * @Description ：
 */

public class ZJ1 {
    /**
     * 题目分析：
     * 仔细分析 1<=pi<=i 知道用动态规划做。
     * 记录第一次到达i为dp[i]，此时前面的所有门肯定是已经到达偶数次了
     * 因为传送只会后退，前进的唯一方式是偶数次到达并+1，不能跳跃
     * 所以到达i门前面所有门都走过并且经过偶数次（反正法也可以证明）
     * dp[i]=dp[i-1]+第二次到达i-1 + 1
     * 第一次到达i-1门后再走一步会回到p[i-1]，此时p[i-1]门到达奇数次，其他所有门到达偶数次
     * 这和第一次到达p[i-1]门的情况完全相同，所以从p[i-1]门回到i-1门，需要dp[i-1]-dp[p[i-1]]
     * 所以dp[i] = dp[i-1] + dp[i-1] - dp[p[i-1]] + 1 + 1
     * dp[i] = 2 * dp[i-1] - dp[p[i-1]] + 2
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int count = sc.nextInt();
        int mod = 1000000007;
        int[] dp = new int[count + 1];
        dp[0] = 0;
        int[] p = new int[count + 1];
        for (int i = 1; i <= count; i++) {
            p[i] = sc.nextInt();
            /**
             *  dp[i-1]+1 第一次到达i，
             *  +1 跳回nums[i]
             *  此时nums[i]奇数次，nums[i]之后到i-1都是偶数次
             *  此时和第一次到达nums[i]的情况完全相同
             *  -1 到达nums[i]-1 就相当于 nums[i]也是偶数 从nums[i]到i-1都是偶数
             *  +(dp[i-1]-dp[nums[i]-1]) 从nums[i]-1 到达i-1且i-1还是偶数次
             *  +1 爹第二次到达 i即为所求
             *  总体上 dp[i] = dp[i-1]+1+1-1+(dp[i-1]-dp[nums[i]-1])+1;
             *  汇总
             *  dp[i] = 2*dp[i-1]+2-dp[nums[i]-1];
             */
            dp[i] = (2 * dp[i - 1] - dp[p[i] - 1] + 2) % mod;
        }
        dp[count] = dp[count] > 0 ? dp[count] : dp[count] + mod;
        System.out.println(dp[count]);
    }
}
